﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace ORS.Metadata
{
    public partial class GetPzXML : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //获取传递过来的参数
            string type = Request["DoType"];
            switch (type)
            {
                case "Add": AddXML(); break;
                default:
                    break;
            }

        }

        /// <summary>
        /// 生成的XML
        /// </summary>
        private void AddXML()
        {
            string val = Request["VAL"]; //共有字段二属性
            string valf = Request["VALF"]; //共有字段四属性
            string val_t = Request["VAL_T"]; //特有字段
            int id = Convert.ToInt32(Request["ID"]); //图像类型
            string id1 = Request["ID1"];//XML还是TXT类型

            string filename = "~/XML/" + Request["FILENAME"] + ".xml"; //要保存的文件名和路径

            string[] valArry = val.Split('|');
            string[] valfArry = valf.Split('|');
            string[] val_tArry = val_t.Split('|');
            string[] structnameArry = { "PlatformCarrier", "SensorName", "PixlsDepth", "PhotoRegion", "Projection",
                                      "ImgGenDate","imgSize_rows","ImageFormat","Scale",
                                      "ImgGenTime","imgSize_cols","Resolution","CoordinateSystem"};//共有属性(2)节点名称

            string[] structnameArry_f ={"UpperLeftLong","LowerRightLong",
                                      "UpperLeftLat","LowerRightLat"};//共有属性(4)节点名称


            string[][] structnameArry_t = new string[8][];//特有字段
            structnameArry_t[0] = new string[] { "ViewAngle", "BandType", "ProductLevel", "CloudRatio", "BandNum", "typeId" };
            structnameArry_t[1] = new string[] { };
            structnameArry_t[2] = new string[] { };
            structnameArry_t[3] = new string[] { };
            structnameArry_t[4] = new string[] { };
            structnameArry_t[5] = new string[] { };
            structnameArry_t[6] = new string[] { };
            structnameArry_t[7] = new string[] { };


            try
            {

                #region  预生成一个空的框架XML文件
                // XmlTextWriter writer = new XmlTextWriter(Server.MapPath("XML.xml"), System.Text.Encoding.UTF8);

                // writer.WriteStartDocument();
                // writer.WriteStartElement("file");
                // writer.WriteStartAttribute("type", "xml"); //向先前创建的元素中添加一个属性
                // writer.WriteStartAttribute("datatype", id); //向先前创建的元素中添加一个属性


                //// writer.WriteStartElement("common");
                // //writer.WriteStartElement("node");

                // //writer.WriteElementString("structname", "PlatformCarrier");
                // //writer.WriteStartAttribute("value", ""); //向先前创建的元素中添加一个属性
                // //writer.WriteElementString("filterformat", valArry[0]);
                // //writer.WriteElementString("filtertype", "%S");
                // //writer.WriteElementString("propertyname", "");
                // //writer.WriteStartAttribute("value", "");//向先前创建的元素中添加一个属性
                // //writer.WriteElementString("propertyname", "");
                // //writer.WriteStartAttribute("value", "");//向先前创建的元素中添加一个属性
                // //writer.WriteEndElement(); // //node节点结束标志

                // //--------------------------------------------------------------
                // //各个node
                // //--------------------------------------------------------------
                //// writer.WriteEndElement();  //common节点结束标志
                // writer.WriteEndElement();  //file节点结束标志
                // writer.WriteEndDocument();
                // writer.Close();
                #endregion

                if (id1.Equals("1"))  //XML类型
                {
                    XmlDocument xmlDoc = new XmlDocument();
                    xmlDoc.Load(Server.MapPath("XML.xml"));  //读取预生成的框架XML文件
                    XmlNode root = xmlDoc.SelectSingleNode("file");//查找<file>
                    XmlElement rootcache = (XmlElement)root;//将子节点类型转换为XmlElement类型
                    rootcache.SetAttribute("datatype", id1); //根据传入的ID  写入为xml还是txt类型
                    XmlElement Cnode = xmlDoc.CreateElement("common"); //创建common节点

                    #region 共有字段二属性节点添加
                    for (int i = 0; i < structnameArry.Length; i++)  //循环加入node节点
                    {
                        if (!valArry[2 * i].Equals(""))
                        {
                            XmlElement Anode = xmlDoc.CreateElement("node"); //创建node节点

                            XmlElement A1 = xmlDoc.CreateElement("structname"); //创建structname节点
                            A1.SetAttribute("value", "");//设置该节点属性
                            A1.InnerText = structnameArry[i];//设置节点文本--------平台载体：
                            Anode.AppendChild(A1);//添加到<node>节点中
                            XmlElement A2 = xmlDoc.CreateElement("filterformat"); //创建filterformat节点

                            if (valArry[2 * i + 1].Equals(""))
                            {
                                A2.InnerText = valArry[2 * i];
                            }
                            else
                            {
                                A2.InnerText = valArry[2 * i] + "*" + valArry[2 * i + 1];//设置文本节点
                            }
                            Anode.AppendChild(A2);//添加到<node>节点中
                            XmlElement A3 = xmlDoc.CreateElement("filtertype"); //创建filtertype节点
                            Anode.AppendChild(A3);//添加到<node>节点中
                            XmlElement A4 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A4.SetAttribute("value", "");//设置该节点属性
                            Anode.AppendChild(A4);//添加到<node>节点中
                            XmlElement A5 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A5.SetAttribute("value", "");//设置该节点属性
                            Anode.AppendChild(A5);//添加到<node>节点中

                            Cnode.AppendChild(Anode);//添加到<common>节点中
                        }
                    }
                    #endregion

                    #region 共有字段四属性节点添加
                    for (int i = 0; i < structnameArry_f.Length; i++)  //循环加入node节点
                    {
                        if (!valfArry[4 * i].Equals(""))
                        {
                            XmlElement Anode = xmlDoc.CreateElement("node"); //创建node节点

                            XmlElement A1 = xmlDoc.CreateElement("structname"); //创建structname节点
                            A1.SetAttribute("value", "");//设置该节点属性
                            A1.InnerText = structnameArry_f[i];//设置节点文本--------平台载体：
                            Anode.AppendChild(A1);//添加到<node>节点中
                            XmlElement A2 = xmlDoc.CreateElement("filterformat"); //创建filterformat节点

                            if (valfArry[4 * i + 1].Equals(""))
                            {
                                A2.InnerText = valfArry[4 * i];
                            }
                            else
                            {
                                A2.InnerText = valfArry[4 * i] + "*" + valfArry[4 * i + 1];//设置文本节点
                            }
                            Anode.AppendChild(A2);//添加到<node>节点中
                            XmlElement A3 = xmlDoc.CreateElement("filtertype"); //创建filtertype节点
                            Anode.AppendChild(A3);//添加到<node>节点中
                            XmlElement A4 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A4.SetAttribute("value", valfArry[4 * i + 2]);//设置该节点属性
                            Anode.AppendChild(A4);//添加到<node>节点中
                            XmlElement A5 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A5.SetAttribute("value", valfArry[4 * i + 3]);//设置该节点属性
                            Anode.AppendChild(A5);//添加到<node>节点中

                            Cnode.AppendChild(Anode);//添加到<common>节点中
                        }
                    }
                    #endregion

                    #region 特有字段节点添加
                    for (int i = 0; i < structnameArry_t[id-1].Length; i++)  //循环加入node节点
                    {
                        if (!val_tArry[2 * i + 1].Equals(""))
                        {
                            XmlElement Anode = xmlDoc.CreateElement("node"); //创建node节点

                            XmlElement A1 = xmlDoc.CreateElement("structname"); //创建structname节点
                            A1.SetAttribute("value", "");//设置该节点属性
                            A1.InnerText = structnameArry_t[id - 1][i];//设置节点文本
                            Anode.AppendChild(A1);//添加到<node>节点中
                            XmlElement A2 = xmlDoc.CreateElement("filterformat"); //创建filterformat节点

                            if (val_tArry[2 * i + 2].Equals(""))
                            {
                                A2.InnerText = val_tArry[2 * i + 1];
                            }
                            else
                            {
                                A2.InnerText = val_tArry[2 * i + 1] + "*" + val_tArry[2 * i + 2];//设置文本节点
                            }
                            Anode.AppendChild(A2);//添加到<node>节点中
                            XmlElement A3 = xmlDoc.CreateElement("filtertype"); //创建filtertype节点
                            Anode.AppendChild(A3);//添加到<node>节点中
                            XmlElement A4 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A4.SetAttribute("value", "");//设置该节点属性
                            Anode.AppendChild(A4);//添加到<node>节点中
                            XmlElement A5 = xmlDoc.CreateElement("propertyname"); //创建propertyname节点
                            A5.SetAttribute("value", "");//设置该节点属性
                            Anode.AppendChild(A5);//添加到<node>节点中

                            Cnode.AppendChild(Anode);//添加到<common>节点中
                        }
                    }
                    #endregion

                    root.AppendChild(Cnode);//添加到<file>节点中
                    xmlDoc.Save(Server.MapPath(filename)); //输出xml到指定位置

                    Response.Write("1");

                }
                else if (id1.Equals("2")) //TXT类型
                {

                }
                else
                {
                    Response.Write("2");
                }

            }
            catch (Exception ex)
            {
                Response.Write("2");
            }

        }
    }
}